from fontTools.pens.perimeterPen import PerimeterPen
import unittest


def draw1_(pen):
    pen.moveTo((254, 360))
    pen.lineTo((771, 367))
    pen.curveTo((800, 393), (808, 399), (819, 412))
    pen.curveTo((818, 388), (774, 138), (489, 145))
    pen.curveTo((188, 145), (200, 398), (200, 421))
    pen.curveTo((209, 409), (220, 394), (254, 360))
    pen.closePath()


def draw2_(pen):
    pen.moveTo((254, 360))
    pen.curveTo((220, 394), (209, 409), (200, 421))
    pen.curveTo((200, 398), (188, 145), (489, 145))
    pen.curveTo((774, 138), (818, 388), (819, 412))
    pen.curveTo((808, 399), (800, 393), (771, 367))
    pen.closePath()


def draw3_(pen):
    pen.moveTo((771, 367))
    pen.curveTo((800, 393), (808, 399), (819, 412))
    pen.curveTo((818, 388), (774, 138), (489, 145))
    pen.curveTo((188, 145), (200, 398), (200, 421))
    pen.curveTo((209, 409), (220, 394), (254, 360))
    pen.closePath()


def draw4_(pen):
    pen.moveTo((771, 367))
    pen.lineTo((254, 360))
    pen.curveTo((220, 394), (209, 409), (200, 421))
    pen.curveTo((200, 398), (188, 145), (489, 145))
    pen.curveTo((774, 138), (818, 388), (819, 412))
    pen.curveTo((808, 399), (800, 393), (771, 367))
    pen.closePath()


def draw5_(pen):
    pen.moveTo((254, 360))
    pen.lineTo((771, 367))
    pen.qCurveTo((793, 386), (802, 394))
    pen.qCurveTo((811, 402), (819, 412))
    pen.qCurveTo((819, 406), (814, 383.5))
    pen.qCurveTo((809, 361), (796, 330.5))
    pen.qCurveTo((783, 300), (760.5, 266.5))
    pen.qCurveTo((738, 233), (701, 205.5))
    pen.qCurveTo((664, 178), (612, 160.5))
    pen.qCurveTo((560, 143), (489, 145))
    pen.qCurveTo((414, 145), (363, 164))
    pen.qCurveTo((312, 183), (280, 211.5))
    pen.qCurveTo((248, 240), (231.5, 274.5))
    pen.qCurveTo((215, 309), (208, 339.5))
    pen.qCurveTo((201, 370), (200.5, 392.5))
    pen.qCurveTo((200, 415), (200, 421))
    pen.qCurveTo((207, 412), (217.5, 399))
    pen.qCurveTo((228, 386), (254, 360))
    pen.closePath()


def draw6_(pen):
    pen.moveTo((254, 360))
    pen.qCurveTo((228, 386), (217.5, 399))
    pen.qCurveTo((207, 412), (200, 421))
    pen.qCurveTo((200, 415), (200.5, 392.5))
    pen.qCurveTo((201, 370), (208, 339.5))
    pen.qCurveTo((215, 309), (231.5, 274.5))
    pen.qCurveTo((248, 240), (280, 211.5))
    pen.qCurveTo((312, 183), (363, 164))
    pen.qCurveTo((414, 145), (489, 145))
    pen.qCurveTo((560, 143), (612, 160.5))
    pen.qCurveTo((664, 178), (701, 205.5))
    pen.qCurveTo((738, 233), (760.5, 266.5))
    pen.qCurveTo((783, 300), (796, 330.5))
    pen.qCurveTo((809, 361), (814, 383.5))
    pen.qCurveTo((819, 406), (819, 412))
    pen.qCurveTo((811, 402), (802, 394))
    pen.qCurveTo((793, 386), (771, 367))
    pen.closePath()


def draw7_(pen):
    pen.moveTo((771, 367))
    pen.qCurveTo((793, 386), (802, 394))
    pen.qCurveTo((811, 402), (819, 412))
    pen.qCurveTo((819, 406), (814, 383.5))
    pen.qCurveTo((809, 361), (796, 330.5))
    pen.qCurveTo((783, 300), (760.5, 266.5))
    pen.qCurveTo((738, 233), (701, 205.5))
    pen.qCurveTo((664, 178), (612, 160.5))
    pen.qCurveTo((560, 143), (489, 145))
    pen.qCurveTo((414, 145), (363, 164))
    pen.qCurveTo((312, 183), (280, 211.5))
    pen.qCurveTo((248, 240), (231.5, 274.5))
    pen.qCurveTo((215, 309), (208, 339.5))
    pen.qCurveTo((201, 370), (200.5, 392.5))
    pen.qCurveTo((200, 415), (200, 421))
    pen.qCurveTo((207, 412), (217.5, 399))
    pen.qCurveTo((228, 386), (254, 360))
    pen.closePath()


def draw8_(pen):
    pen.moveTo((771, 367))
    pen.lineTo((254, 360))
    pen.qCurveTo((228, 386), (217.5, 399))
    pen.qCurveTo((207, 412), (200, 421))
    pen.qCurveTo((200, 415), (200.5, 392.5))
    pen.qCurveTo((201, 370), (208, 339.5))
    pen.qCurveTo((215, 309), (231.5, 274.5))
    pen.qCurveTo((248, 240), (280, 211.5))
    pen.qCurveTo((312, 183), (363, 164))
    pen.qCurveTo((414, 145), (489, 145))
    pen.qCurveTo((560, 143), (612, 160.5))
    pen.qCurveTo((664, 178), (701, 205.5))
    pen.qCurveTo((738, 233), (760.5, 266.5))
    pen.qCurveTo((783, 300), (796, 330.5))
    pen.qCurveTo((809, 361), (814, 383.5))
    pen.qCurveTo((819, 406), (819, 412))
    pen.qCurveTo((811, 402), (802, 394))
    pen.qCurveTo((793, 386), (771, 367))
    pen.closePath()


class PerimeterPenTest(unittest.TestCase):
    def test_PScontour_clockwise_line_first(self):
        pen = PerimeterPen(None)
        draw1_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_PScontour_counterclockwise_line_last(self):
        pen = PerimeterPen(None)
        draw2_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_PScontour_clockwise_line_last(self):
        pen = PerimeterPen(None)
        draw3_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_PScontour_counterclockwise_line_first(self):
        pen = PerimeterPen(None)
        draw4_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_TTcontour_clockwise_line_first(self):
        pen = PerimeterPen(None)
        draw5_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_TTcontour_counterclockwise_line_last(self):
        pen = PerimeterPen(None)
        draw6_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_TTcontour_clockwise_line_last(self):
        pen = PerimeterPen(None)
        draw7_(pen)
        self.assertEqual(1589, round(pen.value))

    def test_TTcontour_counterclockwise_line_first(self):
        pen = PerimeterPen(None)
        draw8_(pen)
        self.assertEqual(1589, round(pen.value))


if __name__ == "__main__":
    import sys

    sys.exit(unittest.main())
